﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace Jurassic_Island
{
    public class ENPartidas
    {
        private int id;
        private string jugador;
        private int vida;
        private int dinero;
        private string lugar;

        private CADPartidas cadPartidas = new CADPartidas();
        private String nombreTabla = "Partidas";

        public ENPartidas()
        {
            id = 0;
            jugador = "";
            vida = 100;
            dinero = 90;
            lugar = "";
        }

        public ENPartidas(ENPartidas enPart)
        {
            id = enPart.id;
            jugador = enPart.jugador;
            vida = enPart.vida;
            dinero = enPart.dinero;
            lugar = enPart.lugar;
        }

        public ENPartidas(int id_part, string jugador_part, int vida_part, int dinero_part, string lugar_part)
        {
            id = id_part;
            jugador = jugador_part;
            vida = vida_part;
            dinero = dinero_part;
            lugar = lugar_part;
        }

        public ENPartidas(DataRow drPartida)
        {
            id = int.Parse(drPartida["id_part"].ToString());
            jugador = drPartida["jugador_part"].ToString();
            vida = int.Parse(drPartida["vida_part"].ToString());
            dinero = int.Parse(drPartida["dinero_part"].ToString());
            lugar = drPartida["lugar_part"].ToString();
        }

        public int ID
        {
            get { return id; }
            set { id = value; }
        }

        public string Jugador
        {
            get { return jugador; }
            set { jugador = value; }
        }

        public int Vida
        {
            get { return vida; }
            set { vida = value; }
        }

        public int Dinero
        {
            get { return dinero; }
            set { dinero = value; }
        }

        public string Lugar
        {
            get { return lugar; }
            set { lugar = value; }
        }

        public bool GuardarPartida()
        {
            bool salida = false;

            try
            {
                DataSet dsPartidas = ObtenerListaPartidas();
                DataRow drPartida = dsPartidas.Tables[nombreTabla].Rows.Find(ID);
                //drPartida.BeginEdit();
                drPartida["vida_part"] = Vida;
                drPartida["dinero_part"] = Dinero;
                drPartida["lugar_part"] = Lugar;
                //drPartida.AcceptChanges();
                //drPartida.SetModified();
                //drPartida.EndEdit();
                cadPartidas.ActualizarPartidas(dsPartidas);
            }
            catch(Exception)
            {
                salida = false;
            }

            return salida;
        }

        public DataSet ObtenerListaPartidas()
        {
            DataSet resultado = new DataSet();
            try
            {
                resultado = cadPartidas.ObtenerTablaPartidas();
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return resultado;
        }

        public DataSet ObtenerListaPartidasPorID(int id)
        {
            DataSet resultado = new DataSet();
            try
            {
                resultado = cadPartidas.ObtenerTablaPartidasPorID(id);
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return resultado;
        }

        public DataSet ObtenerListaPartidasPorJugador(String jugador)
        {
            DataSet resultado = new DataSet();
            try
            {
                resultado = cadPartidas.ObtenerTablaPartidasPorJugador(jugador);
            }
            catch (Exception ex)
            {
                throw (ex);
            }

            return resultado;
        }

        public bool ActualizarPartidas(DataSet dsPartidas)
        {
            bool resultado = false;

            try
            {
                resultado = cadPartidas.ActualizarPartidas(dsPartidas);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        public bool EliminarPartida()
        {
            bool resultado = false;

            try
            {
                DataSet dsPartida = cadPartidas.ObtenerTablaPartidas();

                dsPartida.Tables[nombreTabla].Rows.Find(id).Delete();

                resultado = cadPartidas.ActualizarPartidas(dsPartida);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return resultado;
        }

        public bool InsertarPartida(bool actualizar = false)
        {
            bool resultado = false;

            try
            {
                DataSet dsPartidas = cadPartidas.ObtenerTablaPartidas();

                DataRow dr;
                if (actualizar)
                {
                    //dr = dsCaminos.Tables["Caminos"].NewRow();
                    dr = dsPartidas.Tables[nombreTabla].Rows.Find(id);
                    //dsCaminos.Tables["Caminos"].Rows.Find(id.ToString()).;
                }
                else
                {
                    Random dado = new Random();
                    CADLugares cadLug = new CADLugares();
                    DataSet dsLugares = cadLug.ObtenerTablaLugares();
                    int regs = dsLugares.Tables["Lugares"].Rows.Count;
                    DataRow drLug = dsLugares.Tables["Lugares"].Rows[dado.Next(regs)];
                    lugar = drLug["Nombre"].ToString();

                    dr = dsPartidas.Tables[nombreTabla].NewRow();
                }
                //dsCaminos.Tables["Caminos"].Rows.Clear();

                dr["jugador_part"] = jugador.ToString();
                dr["vida_part"] = vida.ToString();
                dr["dinero_part"] = dinero.ToString();
                dr["lugar_part"] = lugar.ToString();
                

                if (actualizar)
                    dr.EndEdit();
                else
                    dsPartidas.Tables[nombreTabla].Rows.Add(dr);


                resultado = cadPartidas.ActualizarPartidas(dsPartidas);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }
    }
}
